﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Loja.Banco;
using System.Windows.Forms;

namespace Loja.Aplicação
{
    class VendaControle
    {
        public LOJA banco { get; set; }

        public VendaControle(LOJA b)
        {
            banco = b;
        }

        public void Salvar(Venda venda)
        {
            banco.AddToVenda(venda);
            banco.SaveChanges();
        }

        public IEnumerable<Venda> Listar()
        {
            return null;//-//= banco.Venda.ToList();
        }       
        
        public Object RelatorioVendas(DateTime datainicio, DateTime datafim)
        {
            try
            {
                if (datainicio != null && datafim != null)
                {
                    var vendas = (from x in banco.vw_Vendas
                                  where (x.DataEmissao >= datainicio && x.DataEmissao <= datafim)

                                  select new
                                  {
                                      Código = x.Venda_ID,
                                      x.DataEmissao,
                                      x.FormaPagamento,
                                      x.ValorDesconto,
                                      x.ValorVenda,
                                      x.Nome,
                                      x.Cancelado,
                                      x.DataCancelamento
                                  });

                    return (Object)vendas;
                }
                else
                {
                    var vendas = (from x in banco.vw_Vendas                               

                                  select new
                                  {
                                      Código = x.Venda_ID,
                                      x.DataEmissao,
                                      x.FormaPagamento,
                                      x.ValorDesconto,
                                      x.ValorVenda,
                                      x.Nome,
                                      x.Cancelado,
                                      x.DataCancelamento
                                  });

                    return (Object)vendas;
                }
            }
            catch 
            {
                return null;
            }
        }       
        
        public void Alterar(Venda venda)
        {
            banco.SaveChanges();
        }

        public void Excluir(Venda venda)
        {
            Venda vendaExcluir = (from x in banco.Venda
                                      where x.Venda_ID == venda.Venda_ID
                                      select x).First();

            vendaExcluir.Desativado = false;

            banco.AddToVenda(vendaExcluir);
            banco.SaveChanges();
        }

        public Venda Buscar(Venda venda)
        {
            Venda vendaBuscar = (from x in banco.Venda
                                  where x.Venda_ID == venda.Venda_ID
                                  select x).First();
           
            return vendaBuscar;

        }

        public Venda Buscar(Int32 parametro)
        {
            Venda vendaBuscar;

            vendaBuscar = (from venda in banco.Venda
                           where venda.Venda_ID == parametro
                           select venda).First();

            vendaBuscar.Cadastro = (from venda in banco.Venda
                                    join cliente in banco.Cadastro on venda.Cadastro.Cadastro_ID equals cliente.Cadastro_ID
                                    where venda.Venda_ID == vendaBuscar.Venda_ID
                                    select cliente).First();

            vendaBuscar.Vendedor = (from venda in banco.Venda
                                    join vendedor in banco.Vendedor on venda.Vendedor.Vendedor_ID equals vendedor.Vendedor_ID
                                    where venda.Venda_ID == vendaBuscar.Venda_ID
                                    select vendedor).First();

            vendaBuscar.Usuario = (from venda in banco.Venda
                                   join usuario in banco.Usuario on venda.Usuario.Usuario_ID equals usuario.Usuario_ID
                                   where venda.Venda_ID == vendaBuscar.Venda_ID
                                   select usuario).First();           

            return vendaBuscar;

        }

        public Venda BuscaVendaEstorno(Int32 parametro)
        {
            Venda vendaBuscar;

            vendaBuscar = (from venda in banco.Venda
                           where venda.Venda_ID == parametro
                           select venda).First();

            return vendaBuscar;
        }

        public void CancelarVenda(Venda venda) 
        {
            venda.Cancelado = true;
            venda.DataCancelamento = DateTime.Now;
            venda.ObsCancelamento = "VENDA ESTORNADA";
            banco.SaveChanges();
        }


    }
}
